package com.demo.burt.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.demo.burt.dataobject.TestUser;
import com.github.pagehelper.PageInfo;

/**
 * <p>
 * 用户服务类
 * </p>
 *
 * @author luowei1
 * @since 2018-12-12
 */
public interface TestUserService {

    /**
     * <p>
     * 根据id查询{@link TestUser}
     * </p>
     *
     * @param userId 用户id
     * @return 返回<code>TestUser</code>，数据不存在，返回<code>null</code>
     */
    TestUser getUserById(Long userId);

    TestUser getUserByIdW(Long userId);

    /**
     * <p>
     * 根据id批量查询{@link TestUser}
     * </p>
     *
     * @param userIds 用户id
     * @return 返回<code>List<TestUser></Test></code>，数据不存在，返回<code>Empty</code>
     */
    List<TestUser> getUsersByIds(List<Long> userIds);

    /**
     * <p>
     * 根据条件查询{@link TestUser}
     * </p>
     *
     * @param map 查询条件
     * @return 返回<code>List<TestUser></code>，数据不存在，返回<code>Empty</code>
     */
    List<TestUser> selectTestByMap(Map<String, Object> map);

    /**
     * <p>
     * 根据手机号查询{@link TestUser}
     * </p>
     *
     * @param mobile 手机号
     * @return 返回<code>TestUser</code>，数据不存在，返回<code>null</code>
     */
    TestUser selectOneUser(String mobile);

    /**
     * <p>
     * 根据手机号查询{@link TestUser}
     * </p>
     *
     * @param mobile 手机号
     * @return 返回<code>TestUser</code>，数据不存在，返回<code>null</code>
     */
    TestUser selectOneUserRdb(String mobile);

    /**
     * <p>
     * 根据条件查询{@link TestUser}，返回map集合
     * </p>
     *
     * @param mobile 手机号
     * @return 返回<code>Map<String, Object></code>，数据不存在，返回<code>null</code>
     */
    List<Map<String, Object>> selectMapUser(String mobile);

    /**
     * <p>
     * 根据条件查询{@link TestUser}的数量
     * </p>
     *
     * @param userName 用户名
     * @return 返回符合条件的数量，数据不存在，返回<code>0</code>
     */
    Integer selectCountUser(String userName);

    /**
     * <p>
     * 根据条件查询{@link TestUser}
     * </p>
     *
     * @param userName 用户名
     * @return 返回<code>List<TestUser></code>，数据不存在，返回<code>Empty</code>
     */
    List<TestUser> queryUsers(String userName);

    /**
     * <p>
     * 查询在某个时间节点(含)之前注册的用户(<=){@link TestUser}
     * </p>
     *
     * @param joinDate 时间节点
     * @param pageNum 分页页码 从1开始
     * @param pageSize 每页大小
     * @return 返回<code>PageInfo<TestUser></code>
     */
    PageInfo<TestUser> queryUserPage(Date joinDate, int pageNum, int pageSize);

    /**
     * <p>
     * 根据用户名查找用户
     * </p>
     *
     * @param userName 用户名
     * @return 返回<code>TestUser</code>，数据不存在，返回<code>null</code>
     */
    TestUser getTestByName(String userName);

    List<TestUser> getAllUser();
}
